# -*- coding: utf-8 -*-
"""
@Time ： 2023/9/10 20:50
@Auth ： y.h
@File ：file_controller.py
@IDE ：PyCharm
@Motto：The sooner you start to code, the longer the program will take. —— Roy Carlson
"""

import pandas as pd
import openpyxl as op
from pythonProjectTemplate.Lib.site_packages.openpyxl import load_workbook
from pythonProjectTemplate.Entity.SystemEntity.load_file_entity import 文件加载实体类
from pythonProjectTemplate.Utils.object_list_conversion import list_to_object, object_to_list
from pythonProjectTemplate.Entity.SystemEntity.entity_load import load_empty_entity, entity_load
from pythonProjectTemplate.Entity.SystemEntity.load_excel_properties import 读取Excel表单的配置


# todo 2023/9/19 20:38 @y.h 由于python互斥锁机制 多线程无法提升运行效率  有时间用cpp实现  多进程在无法确定运行环境的情况下最好也不用
# 不写GUI的程序做起来好舒服!!! 😜😜😜


def pandas读取Excel表(file_entity: 文件加载实体类):
    file_dict = file_entity.get_file_names()

    i = 0

    data_result_dict = dict()
    for file_name in file_dict:

        file_name: str
        file_name1 = file_name.replace("\\", "/")
        file_name1 = file_name1.replace("\\\\", "/")

        wb_name = file_name1.split("/")[-1].split(".")[0]

        property_list = file_dict.get(file_name)
        data_result_sheet_dict = dict()
        pro: 读取Excel表单的配置
        for pro in property_list:
            
            df = pd.read_excel(io=file_name,
                               sheet_name=pro.get_sheet_name(),
                               header=pro.get_header(),
                               names=pro.get_names(),
                               index_col=pro.get_index_col(),
                               usecols=pro.get_usecols(),
                               dtype=pro.get_dtype(),
                               engine=pro.get_engine(),
                               converters=pro.get_converters(),
                               true_values=pro.get_true_values(),
                               false_values=pro.get_false_values(),
                               skiprows=pro.get_skiprows(),
                               nrows=pro.get_nrows(),
                               na_values=pro.get_na_values(),
                               keep_default_na=pro.get_keep_default_na(),
                               )

            data_result_sheet_dict.update({pro.get_sheet_name(): df})
        data_result_dict.update({wb_name: data_result_sheet_dict})

    return data_result_dict

# 如果文件内有公式用这个方法读,但这个方法巨慢,慎用
def openpyxl读取Excel(file_entity: 文件加载实体类()):
    file_dict = 文件加载实体类.get_file_names(file_entity)



    data_result_dict = dict()
    for file_name in file_dict:

        file_name: str
        file_name1 = file_name.replace("\\", "/")
        file_name1 = file_name1.replace("\\\\", "/")

        wb_name = file_name1.split("/")[-1].split(".")[0]

        property_list = file_dict.get(file_name)
        data_result_sheet_dict = dict()
        pro: 读取Excel表单的配置
        i = 0
        for pro in property_list:


            wb = op.load_workbook(file_name,data_only=True)
            ws = wb.worksheets[i]
            df = pd.DataFrame(ws.values)
            i += 1
            print(df)
            data_result_sheet_dict.update({pro.get_sheet_name(): df})
        data_result_dict.update({wb_name: data_result_sheet_dict})

    return data_result_dict


def get_sheet_title(file_path, sheet_name):
    df = pd.read_excel(file_path, sheet_name=sheet_name)
    return df.columns.tolist()
